package com.sevici.servicios;

import java.io.FileInputStream;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import com.sevici.LocaBiciActivity;
import com.sevici.ParsedXMLSevici;
import com.sevici.XMLHandlerLocaBici;
import com.sevici.model.Estacion;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;

public class GPSServicio extends Service {

	private Timer timer = new Timer();
	private static final long UPDATE_INTERVAL = 1000;
	public static ServiceUpdateUIListener UI_UPDATE_LISTENER;
	
	private int count = 0;
	private List<Estacion> estaciones = null;
	
	public static void setUpdateListener(ServiceUpdateUIListener l) {
		UI_UPDATE_LISTENER = l;
	}
	
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		_startService();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		_shutdownService();
	}
	
	private void _startService() {
		timer.scheduleAtFixedRate(
			new TimerTask() {
				public void run() {
					estaciones = actualizaEstaciones();
					handler.sendEmptyMessage(0);
				}
			},
			30000, //30 segundos
			UPDATE_INTERVAL);
	}
	
	private void _shutdownService() {
		if (timer != null) timer.cancel();
	}
	
	//Sobrecargamos el metodo handleMessage(Message msg) de la clase Handler.
	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {			
			UI_UPDATE_LISTENER.update(estaciones);
		}
	};


	private List<Estacion> actualizaEstaciones() {
		ParsedXMLSevici contenedorEstaciones = null;
		try {
			contenedorEstaciones = getContenedorEstaciones();		
		} catch (Exception e) {
			e.printStackTrace();			
		}
		return contenedorEstaciones.getEstaciones();
	}

	
	private ParsedXMLSevici getContenedorEstaciones() throws  Exception {
		
		/* Creamos un SAXParser. */
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser sp = spf.newSAXParser();

		/* Cogemos el XMLReader del SAXParser que hemos creado. */
		XMLReader xr = sp.getXMLReader();
		
		/* Creamos un nuevo ContentHandler y lo aplicamos al XML-Reader*/
		//XMLHandler myXMLHandler = new XMLHandler();
		XMLHandlerLocaBici myXMLHandler = new XMLHandlerLocaBici();
		xr.setContentHandler(myXMLHandler);
		
		FileInputStream archivo = new FileInputStream("sdcard/estaciones_corta.xml");
		InputSource parseador = new InputSource(archivo);
		//parseador.setEncoding("iso-8859-1");
		xr.parse(parseador);
			
		// URL url
		//xr.parse(new InputSource( url.openStream()));
		/* Acaba el tratamiento. */
		
		/* Ponemos los datos por pantalla con el XMLHandler. */
		return myXMLHandler.getParsedData();
	}

}
